//#include <stdio.h>
//#include <stdbool.h>
//#include <string.h>
//#include <math.h>
//
//#define MAX_N 1000000
//
//bool is_prime[MAX_N + 1];
//int prefix[MAX_N + 1];
//
//void sieve() 
//{
//    memset(is_prime, true, sizeof(is_prime));
//    is_prime[0] = false;
//    is_prime[1] = false;
//
//    for (int i = 2; i * i <= MAX_N; i++) 
//    {
//        if (is_prime[i]) 
//        {
//            for (int j = i * i; j <= MAX_N; j += i) 
//            {
//                is_prime[j] = false;
//            }
//        }
//    }
//
//    prefix[0] = 0;
//    for (int i = 1; i <= MAX_N; i++) 
//    {
//        prefix[i] = prefix[i - 1] + (is_prime[i] ? 1 : 0);
//    }
//}
//
//int main()
//{
//    sieve(); 
//
//    int n;
//    scanf_s("%d", &n); 
//
//    while (n--) 
//    {
//        int l, r;
//        scanf_s("%d %d", &l, &r); 
//
//        int ans = prefix[r] - prefix[l - 1];
//        printf("%d\n", ans);
//    }
//
//    return 0;
//}

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>

#define MAX_N 500000

bool is_prime[MAX_N + 1];
int prime_list[MAX_N + 1];
int prime_count = 0;

void sieve(int n)
{
    for (int i = 0; i <= n; i++) 
    {
        is_prime[i] = true;
    }
    is_prime[0] = false;
    is_prime[1] = false;
    for (int i = 2; i * i <= n; i++) 
    {
        if (is_prime[i]) 
        {
            for (int j = i * i; j <= n; j += i) 
            {
                is_prime[j] = false;
            }
        }
    }
    prime_count = 0;
    for (int i = 2; i <= n; i++) 
    {
        if (is_prime[i]) 
        {
            prime_list[prime_count++] = i;
        }
    }
}

int main() 
{
    int N;
    scanf_s("%d", &N);

    if (N < 2)
    {
        printf("0\n");
        return 0;
    }

    sieve(N);

    int maxC = (int)sqrt(2.0 * N);
    long long ans = 0;

    for (int c = 2; c <= maxC; c++) 
    {
        if (c > N) break;
        if (!is_prime[c]) continue;

        long long T = (long long)c * c;
        for (int i = 0; i < prime_count; i++) 
        {
            long long A = prime_list[i];
            if (A > T) break;
            long long B = T - A;
            if (B < 2) continue;
            if (B > N) continue;
            if (is_prime[B]) 
            {
                ans++;
            }
        }
    }
    printf("%lld\n", ans);
    return 0;
}